#ifndef IDATABASEPLUGIN_H
#define IDATABASEPLUGIN_H

#include <QObject>
#include <QList>
#include <QHash>
#include <QVariant>

#include "../manage/ISourcePlugin.h"

class IDatabasePlugin:public ISourcePlugin
{
    Q_OBJECT
    Q_INTERFACES(ISourcePlugin)
public:
    explicit IDatabasePlugin(QObject* parent = nullptr) : ISourcePlugin(parent) {}
    ~IDatabasePlugin() override = default;

    // 1. 初始化数据库连接（核心：传递连接参数）
    virtual bool initialize(const QString& connectionName,  // 连接名（唯一）
                            const QString& databaseName,   // 数据库名（如SQLite的.db文件）
                            const QString& databaseType,   // 数据库类型（如"QSQLITE"、"QMYSQL"）
                            bool isOpenTransaction = false) = 0; // 是否开启事务

    // 2. 执行查询（返回哈希列表：字段名→值）
    virtual QList<QHash<QString, QVariant>> executeQuery(const QString& sql,
                                                         const QVariantList& params = QVariantList()) = 0;

    // 3. 执行更新（INSERT/UPDATE/DELETE，返回受影响行数）
    virtual int executeUpdate(const QString& sql,
                              const QVariantList& params = QVariantList()) = 0;

    // 4. 批量插入（返回插入行数）
    virtual int batchInsert(const QString& sql,
                            const QList<QVariantList>& paramRows) = 0;

    // 5. 事务控制：启用/禁用事务
    virtual void setTransactionEnabled(bool enabled) = 0;

    // 7. 关闭数据库连接
    virtual void close() = 0;
};

// 声明接口（IID必须与插件实现的Q_PLUGIN_METADATA一致）
#define IDATABASEPLUGIN_IID "com.example.DatabasePlugin.IDatabasePlugin"
Q_DECLARE_INTERFACE(IDatabasePlugin, IDATABASEPLUGIN_IID)

#endif